home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Source: /afs/athena.mit.edu/astaff/project/kerberos/src/lib/krb/RCS/dest_tkt.c,v $
- * $Author: jtkohl $
- *
- * Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
- * of Technology.
- *
- * For copying and distribution information, please see the file
- * <mit-copyright.h>.
- */
-
- #ifndef lint
- static char *rcsid_dest_tkt_c =
- "$Id: dest_tkt.c,v 4.9 89/10/02 16:23:07 jtkohl Exp $";
- #endif /* lint */
-
- #include <mit_copy.h>
- #include <stdio.h>
- #include <krb.h>
- /* #include <sys\file.h> */
- #include <sys\types.h>
- #include <sys\stat.h>
- #ifdef TKT_SHMEM
- #include <sys\param.h>
- #endif
- #include <errno.h>
- #include <fcntl.h> /* MS-DOS */
-
- extern int krb_debug;
- /*
- * dest_tkt() is used to destroy the ticket store upon logout.
- * If the ticket file does not exist, dest_tkt() returns RET_TKFIL.
- * Otherwise the function returns RET_OK on success, KFAILURE on
- * failure.
- *
- * The ticket file (TKT_FILE) is defined in "krb.h".
- */
-
- dest_tkt()
- {
- #ifdef IBMPC
- extern int lock_tkt(tkt_header far *,int);
- extern void unlock_tkt(tkt_header far *);
- tkt_header far *hdr;
- char far *ptr;
- char *value;
- unsigned segment,i;
-
- if ((hdr=tkt_ptr())==NULL) {
- #ifdef DEBUG
- if (krb_debug)
- printf("Ticket memory not reserved or"
- "corrupt environment variable\n");
- #endif
- return RET_TKFIL;
- }
-
- if (!lock_tkt(hdr,1))
- return KFAILURE;
-
- hdr->eof_ptr=sizeof(tkt_header); /* drop everything */
- ptr=(char far *)hdr + hdr->eof_ptr;
- /* Nuke everything. */
- for (i=hdr->eof_ptr;i<hdr->buf_size;i++)
- *ptr++='\0';
- unlock_tkt(hdr);
- return (KSUCCESS);
-
- #else /* !IBMPC */
- char *file = TKT_FILE;
- int i,fd;
- struct stat statb;
- char buf[BUFSIZ];
- #ifdef TKT_SHMEM
- char shmidname[MAXPATHLEN];
- #endif /* TKT_SHMEM */
-
- errno = 0;
- if (stat(file,&statb) < 0)
- goto out;
-
- if (!(statb.st_mode & S_IFREG)
- #ifdef notdef
- || statb.st_mode & 077
- #endif
- )
- goto out;
-
- if ((fd = open(file, O_RDWR, 0)) < 0)
- goto out;
-
- bzero(buf, BUFSIZ);
-
- for (i = 0; i < statb.st_size; i += BUFSIZ)
- if (write(fd, buf, BUFSIZ) != BUFSIZ) {
- (void) close(fd);
- goto out;
- }
-
- (void) close(fd);
-
- (void) unlink(file);
-
- out:
- if (errno == ENOENT) return RET_TKFIL;
- else if (errno != 0) return KFAILURE;
- #ifdef TKT_SHMEM
- /*
- * handle the shared memory case
- */
- (void) strcpy(shmidname, file);
- (void) strcat(shmidname, ".shm");
- if ((i = krb_shm_dest(shmidname)) != KSUCCESS)
- return(i);
- #endif /* TKT_SHMEM */
- return(KSUCCESS);
- #endif /* IBMPC */
- }
-